package interfaces.general.cuadrantes;

import java.util.Stack;

import algoritmo.Cuadrante;

/**
 * Clase que se encarga de implementar la estructura del deshacer/rehacer de la vista mensual.
 * Consta de dos pilas, una guarda los cuadrantes a deshacer y la otra los cuadrantes a rehacer,
 * siempre sin exceder el máximo establecido en el atributo "maxCuadsDeshacer". Se basa en la 
 * estructura del patrón de diseño "Memento".
 * @author Jose María Martín y Miguel Ángel Alonso
 */
public class CaretakerCuadrante {
	
	/**
	 * Atributos privados.
	 */

	private java.util.Stack<Cuadrante> pilaCuadsDeshacer;
	private java.util.Stack<Cuadrante> pilaCuadsRehacer;
	private int maxCuadsDeshacer;
	
	/**
	 * Constructor de clase.
	 */
	public CaretakerCuadrante() {
		this.pilaCuadsDeshacer= new java.util.Stack<Cuadrante>();
		this.pilaCuadsRehacer = new java.util.Stack<Cuadrante>();
		this.maxCuadsDeshacer=25;
	}
	
	/**
	 * Métodos de acceso y modificadores.
	 */
	
	/**
	 * Devuelve la pila de cuadrantes a deshacer.
	 * @return 	pila de cuadrantes a deshacer
	 */
	public java.util.Stack<Cuadrante> getPilaCuadsDeshacer() {
		return pilaCuadsDeshacer;
	}
	
	/**
	 * Establece la pila de cuadrantes a deshacer
	 * @param pilaCuadsDeshacer
	 */
	public void setPilaCuadsDeshacer(java.util.Stack<Cuadrante> pilaCuadsDeshacer) {
		this.pilaCuadsDeshacer = pilaCuadsDeshacer;
	}
	
	/**
	 * Devuelve la pila de cuadrantes a rehacer.
	 * @return 	pila de cuadrantes a rehacer
	 */
	public java.util.Stack<Cuadrante> getPilaCuadsRehacer() {
		return pilaCuadsRehacer;
	}
	
	/**
	 * Establece la pila de cuadrantes a rehacer
	 * @param pilaCuadsRehacer
	 */
	public void setPilaCuadsRehacer(java.util.Stack<Cuadrante> pilaCuadsRehacer) {
		this.pilaCuadsRehacer = pilaCuadsRehacer;
	}
	
	/**
	 * Devuelve el máximo de cuadrantes a almacenar en el historial.
	 * @return máximo nº de cuadrantes
	 */
	public int getMaxCuadsDeshacer() {
		return maxCuadsDeshacer;
	}
	
	/**
	 * Establece el máximo nº de cuadrantes a almacenar.
	 * @param maxCuadsDeshacer
	 */
	public void setMaxCuadsDeshacer(int maxCuadsDeshacer) {
		this.maxCuadsDeshacer = maxCuadsDeshacer;
	}

}
